package jk.fox.node.client;

import jk.fox.node.node.RpcNode;
import jk.fox.engine.RpcNodeDefinition;

import java.util.Map;

/**
 * Rpc客户端集群控制器（上下层API连接器 API核心控制器）
 * @author cuichao
 * @Description: RpcCluster
 * @Date: create in 2020/5/31 11:53
 */
public interface RpcCluster {

    /**
     * 添加节点
     * @param rdf
     * @return
     */
    RpcNode addNode(RpcNodeDefinition rdf);
    /**
     * 选取节点
     * @param node
     * @return
     */
    String choose(RpcNode node);
    /**
     * 获取是所有节点
     * @return
     */
    Map<String,RpcNode> nodes();
    /**
     * 判断是否可以同源调用
     * @param domain
     * @return
     */
    boolean hasSameSource(String domain);
    /**
     * 执行远程Rpc服务
     * @param path
     * @param node
     * @param parameter
     * @param parameterTypes
     * @return
     * @throws Exception
     */
    Object execute(String path,RpcNode node, Object[] parameter,String[] parameterTypes) throws Exception;

}
